package com.sjms._03_创建_抽象工厂;

/**
 * 抽象工厂
 * <p>
 * 创建对象实例时，不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中，并返回。
 * 在工厂方法的基础上，进一步抽象工厂类,将工厂抽象成两层，AbsFactory(抽象工厂) 和具体实现工厂子类。
 * 调用者根据创建对象类型使用对应的工厂子类。
 * 这样将单个的简单工厂类变成了工厂簇， 利于代码的维护和扩展
 * <p>
 * 使用场景：工厂存在扩展的可能，且扩展后工厂的生产方式存在差异
 */
public class _Test {

    public static void main(String[] args) {

        /**
         * 上海工厂
         */
        Coffee sh_kf_1 = new ShangHaiCoffeeFactory().createCoffee("星巴克");
        Coffee sh_kf_2 = new ShangHaiCoffeeFactory().createCoffee("雀巢");
        Coffee sh_kf_3 = new ShangHaiCoffeeFactory().createCoffee("牛栏山");

        /**
         * 杭州工厂
         */
        Coffee hz_kf_1 = new HangZhouCoffeeFactory().createCoffee("星巴克");
        Coffee hz_kf_2 = new HangZhouCoffeeFactory().createCoffee("雀巢");
        Coffee hz_kf_3 = new HangZhouCoffeeFactory().createCoffee("牛栏山");

        /**
         * 新增后
         */
        //        Coffee ? = new ???CoffeeFactory().createCoffee("?");
        //        Coffee ? = new ???CoffeeFactory().createCoffee("?");
        //        Coffee ? = new ???CoffeeFactory().createCoffee("?");

    }

}
